package br.ufpe.cin.ip.biblioteca.negocio;

import br.ufpe.cin.ip.biblioteca.entidades.Usuario;
import br.ufpe.cin.ip.biblioteca.excecoes.RepositorioException;
import br.ufpe.cin.ip.biblioteca.excecoes.UsuarioJaCadastradoException;
import br.ufpe.cin.ip.biblioteca.excecoes.UsuarioNaoEncontradoException;
import br.ufpe.cin.ip.biblioteca.iterator.IteratorUsuario;
import br.ufpe.cin.ip.biblioteca.repositorios.RepositorioUsuario;

public class CadastroUsuarioImpl implements CadastroUsuario {
	private RepositorioUsuario repositorio;
	
	public CadastroUsuarioImpl(RepositorioUsuario repositorioUsuario) {
		this.repositorio = repositorioUsuario;
	}
	
	@Override
	public void adicionar(Usuario usuario) throws RepositorioException, UsuarioJaCadastradoException {
		if(this.existe(usuario)) {
			throw new UsuarioJaCadastradoException();
		} else {
			this.repositorio.adicionar(usuario);
		}
	}
	
	@Override
	public void remover(Usuario usuario) throws RepositorioException, UsuarioNaoEncontradoException {
		if(this.existe(usuario)) {
			this.repositorio.remover(usuario);
		} else {
			throw new UsuarioNaoEncontradoException();
		}
	}
	
	@Override
	public void atualizar(Usuario usuario) throws RepositorioException, UsuarioNaoEncontradoException {
		if(this.existe(usuario)) {
			this.repositorio.atualizar(usuario);
		} else {
			throw new UsuarioNaoEncontradoException();
		}
	}
	
	@Override
	public Usuario buscar(Usuario usuario) throws RepositorioException, UsuarioNaoEncontradoException {
		if(this.existe(usuario)) {
			return this.repositorio.buscar(usuario);
		} else {
			throw new UsuarioNaoEncontradoException();
		}
	}
	
	@Override
	public IteratorUsuario getIterator() {
		return this.repositorio.getIterator();
	}
	
	@Override
	public boolean existe(Usuario usuario) throws RepositorioException {
		return this.repositorio.existe(usuario);
	}
}
